import { locale } from 'dayjs';

import { localStg } from '@/utils/storage';
import 'dayjs/locale/en';
import 'dayjs/locale/zh-cn';

/**
 * 支持的语言类型定义
 * @typedef {"en-US" | "zh-CN"} LangType
 */
export type DayjsLangType = 'en-US' | 'zh-CN';

/**
 * 设置 dayjs 的多语言环境
 *
 * @function setDayjsLocale
 * @param {DayjsLangType} [lang='zh-CN'] - 目标语言类型，默认中文
 * @description
 * 该方法用于动态切换 dayjs 的语言环境，支持中英文。
 * 优先级：传入参数 > 本地存储 > 默认中文
 *
 * 示例：
 *   setDayjsLocale('en-US'); // 设置为英文
 *   setDayjsLocale();        // 根据本地存储或默认中文
 */
export function setDayjsLocale(lang: DayjsLangType = 'zh-CN'): void {
	// 语言映射表，关联 dayjs 内部语言标识
	const localMap: Record<DayjsLangType, string> = {
		'en-US': 'en',
		'zh-CN': 'zh-cn'
	};

	// 获取最终语言，优先级：参数 > 本地存储 > 默认
	const l: DayjsLangType = lang ?? (localStg.get('lang', 'zh-CN') as DayjsLangType);

	// 设置 dayjs 语言环境
	locale(localMap[l]);
}

/**
 * 典型用法示例
 *
 * // 设置为英文环境
 * setDayjsLocale('en-US');
 *
 * // 设置为中文环境
 * setDayjsLocale('zh-CN');
 *
 * // 不传参数时，自动根据本地存储或默认中文
 * setDayjsLocale();
 *
 * // dayjs.format 示例
 * import dayjs from 'dayjs';
 * setDayjsLocale('en-US');
 * console.log(dayjs().format('YYYY-MM-DD dddd')); // 输出英文星期
 */
